/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.gov.cemaden.imagefilter;

import br.gov.cemaden.imagefilter.watcher.ImageAPIWatcher;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Properties;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

/**
 *
 * @author JETHER
 * :: Parametros esperados relacionado a img:
 *  - Path da imagem
 *  - Nome da imagem
 *  - Cod do Produto(em uma única string passa o cod do produto + data-hora)
 * 
 * :: Parâmetros relacionados a aplicação
 *  - 1 = applyTransparency()
 *  - 2 = justSaveImageWithRGB()
 */
public class ImageFilter {
    
    static Logger logger = Logger.getLogger(ImageFilter.class.getName());

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {        
        
        String howto = "java -jar -Dproperties=[conf.properties] [app.jar] [path] [path] [option]";
        
        if (args.length >= 3) {
            
            String pathSource = args[0];
            String pathTarget = args[1];
            int option = Integer.parseInt(args[2]);
            
            String conf = System.getProperty("properties", "conf.properties");            
            Path path = Paths.get(conf);                        
            Properties properties = new Properties();
            
            try{
                properties.load(new FileInputStream(path.toFile()));
            }
            catch(FileNotFoundException ex){
                System.out.printf("Voce deve passar um arquivo valido como parametro ou ter um arquivo conf.properties no seu classpath%n%s%n", howto);
                System.err.printf("O arquivo %s nao foi encontrado%n%s%n", path.toAbsolutePath(), ex);
                System.exit(1);
            }
            catch(IOException ex){
                System.err.printf("Erro ao tentar ler o arquivo %s%n%s%n", path.toAbsolutePath(), ex);
                System.exit(1);
            }
            
            String log4j = properties.getProperty("log4j.properties", "log4j.properties").trim();
            log4j = (log4j.isEmpty()) ? "log4j.properties" : log4j;
            Path logfile = Paths.get(log4j);
            
            try {
                PropertyConfigurator.configure(new FileInputStream(logfile.toFile()));
            } catch (FileNotFoundException ex) {
                System.err.printf("O arquivo de configuracao do log4j (%s) nao foi encontrado%n%s%n", logfile.toAbsolutePath(), ex);
                System.exit(1);
            }            
            
            try {
                Thread.sleep(5000);
            } catch (InterruptedException ex) {
                logger.fatal(ex);
            }
            
            ImageAPIWatcher img = new ImageAPIWatcher(pathSource, pathTarget, option, false, true, properties);
            
            try {
                System.out.println("Begining startFileWatcher() method.");
                System.out.printf( "Source: %s - Target; %s - Option: %d%n", pathSource, pathTarget, option );
                logger.info(String.format("Source: %s - Target; %s - Option: %d%n", pathSource, pathTarget, option));
                img.startFileWatcher();
            } catch (IOException ex) {
                System.out.println("Nao foi possivel iniciar o ImageAPIWatcher: " + ex.getMessage() + " - Causa: " + ex.getCause());
            }
        }
        else {
            System.err.printf("Argumentos invalidos!%n%s", howto);
        }
    }
}
